package com.wn.controller;

import com.alibaba.csp.sentinel.annotation.SentinelResource;
import com.wn.service.MyServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

@RestController
@RefreshScope
public class HelloController {

    @GetMapping("/show")
    public String hello(){
        return "hello sentinel";
    }

    @GetMapping("/list")
    public String list(){
        return "list";
    }


    @Autowired
    private MyServiceImpl myService;

    @GetMapping("/check")
    public String check(){
        return myService.doSomething();
    }

    @GetMapping("/check1")
    public String check1(){
        return myService.doSomething();
    }

    /**
     *
     * 数据的传递的角度来说？
     *   1、前端
     *      1、表单发送数据
     *            GET        参数在url上面
     *            POST       在请求体中
     *      2、url拼接数据
     *           GET
     *      3、axios发送数据
     *           params  发送数据
     *                   在url上面拼接
     *           data    发送数据
     *                    发送是json
     *
     *      4、文件的发送
     *          post、必须表单发送、enctype="多文件数据类型"
     *
     *      5、restful风格
     *
     *   2、后端
     *          GET        参数在url上面
     *          POST       在请求体中
     *          params  发送数据
     *          直接参数接受(@RequestParam),直接对象进行映射
     *
     *          data    发送数据
     *          @RequestBody  可以直接把前端发送过来的json数据转成 bean
     *
     *          restful风格
     *          @PathVariable  获取路径上的请求参数
     *
     *          文件的发送 的接受
     *          通过 MultipartFile 接受 文件
     *
     * @param id
     * @return
     */
    @GetMapping("/product")
    @SentinelResource(value="getProductById",fallback="exceptionHandler")
    public String getProductById(@RequestParam("id") long id){
        return "product:"+id;
    }

    public String exceptionHandler(@RequestParam("id") long id){
        return "热点参数限流";
    }
}